home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 3 / Amiga Tools 3.iso / grafik / videotracker / source / tunnel.s < prev    next >
Encoding:
Text File  |  1993-10-12  |  47.1 KB  |  2,166 lines

  1.  
  2. rout            ;when this is off, the routine-file will be
  3.             ;assembled, on=testing
  4.             
  5. ;debug            ;when this is on, colors in the background will
  6.             ;show how much time the routine needs.
  7.  
  8.  
  9. routinemode    equ    0    ;the routinemode !
  10.  
  11.  
  12. ; the first part of the source handles the things that are necessary to
  13. ; show the picture/copper and playing of the routine.
  14. ; the part between the "***" lines is the routine-source.
  15. ; at the bottom of the file, there are the necessary incbin-files who
  16. ; are needed to test the routine.
  17. ; these are saved with "save effect" in videotracker. they are raw
  18. ; data files which can be fonts,pictures,landscapes,vectorobjects
  19. ; etcetra.
  20. ; the incbin-files are put in the "variables" table, in the routine-
  21. ; player-handler
  22. ; the place where it's done can be found by searching for "!!!"
  23.  
  24.  
  25.     opt    a+    ;devpac 3 optimize
  26.     opt    o+
  27.  
  28.     ifd    rout
  29.     ;videotracker routine-test
  30.  
  31.     incdir    "videotracker:include/"
  32.     include    "exec/types.i"
  33.     include    "graphics/gfxbase.i"
  34.     include    "lvo/graphics_lib.i"
  35.     incdir    'videotracker:effect/'
  36.  
  37. vew_wid    equ    44
  38. vew_hgt    equ    290
  39. win_hgt    equ    117
  40. win_str    equ    $1a
  41.  
  42.     SECTION    1,CODE_C
  43. tus
  44.     move.l    ($4).w,a6
  45.     sub.l    a1,a1
  46.     jsr    -$126(a6)        ;findtask
  47.     move.l    d0,curtsk
  48.     move.l    d0,a0
  49.     move.l    $b8(a0),tskpri
  50.  
  51.     lea    dosnam,a1        ;doslib openen
  52.     moveq.l    #0,d0
  53.     move.l    (4).w,a6
  54.     jsr    -408(a6)        ;openlib
  55.     move.l    d0,doslib
  56.  
  57.     bsr.s    label5            ;videotracker opstarten
  58.     
  59.     move.l    curtsk,a0
  60.     move.l    tskpri,$b8(a0)
  61.     move.l    ($4).w,a6
  62.     jsr    -$84(a6)        ;forbid
  63.  
  64.     move.l    doslib,a1
  65.     move.l    (4).w,a6
  66.     jsr    -414(a6)        ;closelib
  67.  
  68.     moveq.l    #0,d0
  69.     rts
  70.     
  71. label5
  72.     move.l    (4).w,a6        ;workbench gedoe
  73.     move.b    530(a6),ntscmode    ;50/60 hertz halen
  74.  
  75.     cmp.b    #50,ntscmode        ;ntsc ?
  76.     beq.s    str.ntsc
  77.     move.l    #vew_hgt-56,hogscr    ;set NTSC screen hight
  78. str.ntsc
  79.  
  80. ;    move.l    (4).w,a6        ;68030 cache off 
  81. ;    jsr    -120(a6)
  82. ;
  83. ;    btst.b    #1,297(a6)
  84. ;    beq.s    str.nfc
  85. ;    lea.l    str.ft,a5
  86. ;    jsr    -30(a6)
  87. ;str.nfc
  88. ;    jsr    -126(a6)
  89. ;    bra.s    str.fc
  90. ;    
  91. ;str.ft
  92. ;    dc.w    $4e7a,2
  93. ;    bclr    #0,d0
  94. ;    bset    #13,d0
  95. ;    dc.w    $4e7b,2
  96. ;    rte
  97. ;str.fc
  98.  
  99.     lea    cprjmp,a2        ;copjmp zetten !
  100.     move.l    #cprbck-8,d0
  101.     move.w    d0,6(a2)
  102.     swap    d0
  103.     move.w    d0,2(a2)
  104.  
  105.     lea    cprbck-8,a2        ;copstr zetten !
  106.     move.l    #cpr,d0
  107.     move.w    d0,6(a2)
  108.     swap    d0
  109.     move.w    d0,2(a2)
  110.  
  111.     bsr    cprsprrem        ;sprites legen
  112.  
  113.     lea    gfxnam,a1        ;graphics lib openen
  114.     move.l    (4).w,a6
  115.     jsr    -408(a6)        ;openlib
  116.     move.l    d0,a6
  117.     move.l    d0,gfxlib
  118.     move.l    38(a6),oldcprlist
  119.  
  120.     bset    #1,$bfe001
  121.     bsr    copbuf            ;copper vullen
  122.  
  123.     bsr    sysoff
  124.  
  125. gadrun
  126.     btst    #6,($bfe001).l
  127.     bne    gadrun
  128.  
  129. scrend
  130. scrend.play
  131.     bsr    syson
  132.  
  133.     move.l    gfxlib,a1
  134.     move.l    (4).w,a6
  135.     jsr    -414(a6)        ;closelib
  136.  
  137. scrend.qb
  138.     moveq.l    #0,d0    
  139.     rts
  140.     
  141.     ;vertical blank interrupt, no blits.
  142.     ;handles counters,interlace,sprite
  143.     ;level 3
  144.  
  145. intvb
  146.     bra.s    intvb.cnt
  147.     dc.l    'VIDU'
  148.     dc.l    'LOOP'
  149. intvb.cnt
  150.     movem.l    d0-d7/a0-a6,-(sp)
  151.     lea    ($dff000).l,a6
  152.  
  153.     move.w    $01e(a6),d0
  154.     btst    #5,d0            ;vblank ?
  155.     bne.s    intvb.vb
  156.  
  157.     bra.s    intcop.end
  158.  
  159. intvb.vb
  160.     bsr    grap
  161.     bsr    palctr            ;palette zetten
  162.     bsr.s    copbuf            ;copper vullen
  163.     
  164. intvb.end
  165.     move.w    #$0020,$09c(a6)    ;vb bit wissen
  166.     movem.l    (sp)+,d0-d7/a0-a6    ;multitask uit, shit !
  167.     rte
  168.  
  169. intcop.end
  170.     movem.l    (sp)+,d0-d7/a0-a6
  171.     move.l    intvbold,-(sp)
  172.     rts
  173.  
  174.     ;transmission buffer empty routine, BLIT !
  175.     ;handles routines,animations
  176.     
  177. inttbe                    ;tbe interrupt
  178.     movem.l    d0-d7/a0-a6,-(sp)
  179.     lea    ($dff000).l,a6
  180.  
  181.     move.w    $01e(a6),d0
  182.     btst    #0,d0            ;no tbe ?
  183.     beq.s    intdskblk
  184.  
  185.  
  186.     btst    #6,($bfe001).l        ;muis ingedrukt ?
  187.     beq.s    inttbe.cop
  188.     btst    #2,($dff016).l
  189.     beq.s    inttbe.cop
  190.  
  191.     ifd    debug
  192.     move.w    #$700,$dff180
  193.     endc
  194.     
  195.     bsr    rotply            ;routineplayer BLIT !
  196.     bsr.s    copbuf            ;copper vullen
  197.  
  198.     ifd    debug
  199.     move.w    #$070,$dff180
  200.     endc
  201.     
  202. inttbe.cop
  203.  
  204. inttbe.end
  205.     move.w    #$0001,$09c(a6)
  206.     movem.l    (sp)+,d0-d7/a0-a6
  207.     rte
  208.  
  209. intdskblk
  210.     move.w    #$0001,$09c(a6)        ;be sure for no tbe handling
  211.     movem.l    (sp)+,d0-d7/a0-a6
  212.     move.l    inttbeold,-(sp)
  213.     rts
  214.  
  215.  
  216.     ;moves the copperbuffer to the copperlist
  217.     ;sort of double buffering
  218.     
  219. copbuf
  220.     movem.l    d0-d7/a0-a6,-(sp)
  221.  
  222.     lea    ($dff000).l,a6
  223.  
  224. copbuf.novb                ;copperchange overslaan
  225.     moveq.l    #0,d0
  226.     move.b    $005(a6),d0
  227.     lsl.w    #8,d0
  228.     moveq.l    #0,d1
  229.     move.b    $006(a6),d1
  230.     add.w    d1,d0
  231.  
  232.     cmp.w    #$4,d0
  233.     blt    copbuf.novb
  234.  
  235.     cmp.b    #50,ntscmode
  236.     beq.s    copbuf.pal
  237.     cmp.w    #$133-56-8,d0        ;ntsc grens
  238.     bge    copbuf.novb
  239.     bra.s    copbuf.cont
  240. copbuf.pal
  241.     cmp.w    #$133-8,d0        ;pal grens
  242.     bge    copbuf.novb
  243. copbuf.cont
  244.  
  245.     lea    gra.s,a0        ;buffer copieren
  246.     lea    cprbuf,a1
  247.  
  248.     move.w    00*4+2(a0),00*4+2(a1)
  249.     move.w    01*4+2(a0),01*4+2(a1)
  250.     move.w    02*4+2(a0),02*4+2(a1)
  251.     move.w    03*4+2(a0),03*4+2(a1)
  252.     move.w    04*4+2(a0),04*4+2(a1)
  253.     move.w    05*4+2(a0),05*4+2(a1)
  254.     move.w    06*4+2(a0),06*4+2(a1)
  255.     move.w    07*4+2(a0),07*4+2(a1)
  256.     move.w    08*4+2(a0),08*4+2(a1)
  257.     move.w    09*4+2(a0),09*4+2(a1)
  258.  
  259.     move.w    10*4+2(a0),10*4+2(a1)
  260.     move.w    11*4+2(a0),11*4+2(a1)
  261.     move.w    12*4+2(a0),12*4+2(a1)
  262.     move.w    13*4+2(a0),13*4+2(a1)
  263.     move.w    14*4+2(a0),14*4+2(a1)
  264.     move.w    15*4+2(a0),15*4+2(a1)
  265.     move.w    16*4+2(a0),16*4+2(a1)
  266.     move.w    17*4+2(a0),17*4+2(a1)
  267.     move.w    18*4+2(a0),18*4+2(a1)
  268.     move.w    19*4+2(a0),19*4+2(a1)
  269.  
  270.     move.w    20*4+2(a0),20*4+2(a1)
  271.     move.w    21*4+2(a0),21*4+2(a1)
  272.     move.w    22*4+2(a0),22*4+2(a1)
  273.     move.w    23*4+2(a0),23*4+2(a1)
  274.     move.w    24*4+2(a0),24*4+2(a1)
  275.     move.w    25*4+2(a0),25*4+2(a1)
  276.     move.w    26*4+2(a0),26*4+2(a1)
  277.     move.w    27*4+2(a0),27*4+2(a1)
  278.     move.w    28*4+2(a0),28*4+2(a1)
  279.     move.w    29*4+2(a0),29*4+2(a1)
  280.  
  281.     move.w    30*4+2(a0),30*4+2(a1)
  282.     move.w    31*4+2(a0),31*4+2(a1)
  283.     move.w    32*4+2(a0),32*4+2(a1)
  284.     move.w    33*4+2(a0),33*4+2(a1)
  285.     move.w    34*4+2(a0),34*4+2(a1)
  286.     move.w    35*4+2(a0),35*4+2(a1)
  287.     move.w    36*4+2(a0),36*4+2(a1)
  288.     move.w    37*4+2(a0),37*4+2(a1)
  289.     move.w    38*4+2(a0),38*4+2(a1)
  290.     move.w    39*4+2(a0),39*4+2(a1)
  291.  
  292.     move.w    40*4+2(a0),40*4+2(a1)
  293.     move.w    41*4+2(a0),41*4+2(a1)
  294.     move.w    42*4+2(a0),42*4+2(a1)
  295.     move.w    43*4+2(a0),43*4+2(a1)
  296.     move.w    44*4+2(a0),44*4+2(a1)
  297.     move.w    45*4+2(a0),45*4+2(a1)
  298.     move.w    46*4+2(a0),46*4+2(a1)
  299.     move.w    47*4+2(a0),47*4+2(a1)
  300.     move.w    48*4+2(a0),48*4+2(a1)
  301.     move.w    49*4+2(a0),49*4+2(a1)
  302.  
  303.     move.w    50*4+2(a0),50*4+2(a1)
  304.     move.w    51*4+2(a0),51*4+2(a1)
  305.     move.w    52*4+2(a0),52*4+2(a1)
  306.     move.w    53*4+2(a0),53*4+2(a1)
  307.     move.w    54*4+2(a0),54*4+2(a1)
  308.  
  309. copbuf.end
  310.     movem.l    (sp)+,d0-d7/a0-a6
  311.     rts
  312.  
  313.     ;goes back to the workbench
  314.     
  315. syson
  316.     movem.l    d0-d7/a0-a6,-(sp)
  317.  
  318.     move.w    #$0001,$dff09a        ;tbeint uit
  319.     move.l    intvbold,($6c).w
  320.     move.l    inttbeold,($64).w
  321.  
  322.     move.l    4,a6
  323.     jsr    -138(a6)        ;permit
  324.  
  325.     move.l    gfxlib,a6
  326.     jsr    -462(a6)        ;disownblitter
  327.  
  328.     move.l    wbview,a1
  329.     move.l    gfxlib,a6
  330.     jsr    _LVOLoadView(a6)     ; Fix view
  331.     jsr    _LVOWaitTOF(a6)
  332.     jsr    _LVOWaitTOF(a6)         ; wait for LoadView()
  333.  
  334. syson.ras
  335.     cmp.b    #$c0,$dff006        ;prevent copperjump
  336.     bne    syson.ras
  337.  
  338.     move.l    gfxlib,a6
  339.     move.l    gb_copinit(a6),$dff080     ; Kick it into life
  340.  
  341.     movem.l    (sp)+,d0-d7/a0-a6
  342.     rts
  343.     
  344.     ;goes back to the gadgetscreen
  345.     
  346. sysoff
  347.     movem.l    d0-d7/a0-a6,-(sp)
  348.      
  349.     move.l    gfxlib,a6
  350.     move.l    gb_ActiView(a6),wbview    ;current view
  351.     sub.l    a1,a1            ; clear a1
  352.     jsr     _LVOLoadView(a6)     ; Flush View to nothing
  353.     jsr    _LVOWaitTOF(a6)     ; Wait once
  354.     jsr    _LVOWaitTOF(a6)     ; Wait again.
  355.  
  356.     move.l    gfxlib,a6
  357.     jsr    -456(a6)        ;ownblitter
  358.  
  359.     move.l    4,a6
  360.     jsr    -132(a6)        ;forbid
  361.         
  362.     move.l    ($6c).w,intvbold
  363.     move.l    #intvb,($6c).w
  364.     move.l    ($64).w,inttbeold
  365.     move.l    #inttbe,($64).w
  366.     move.w    #$8001,$dff09a        ;tbeint aan
  367.     bsr    gracpr            ;reset copper
  368.     bsr    copbuf            ;copy copper
  369.     move.l    #cpr,$dff080
  370.  
  371.     movem.l    (sp)+,d0-d7/a0-a6
  372.     rts
  373.     
  374. cprsprrem
  375.     movem.l    d0-d7/a0-a6,-(sp)
  376.     lea    cprspr,a0
  377.     move.l    #sprdat,d0
  378.     move.w    #7,d1
  379. cprsprrem.a
  380.     move.w    d0,3*2(a0)
  381.     swap    d0
  382.     move.w    d0,1*2(a0)
  383.     swap    d0
  384.     add.l    #8,a0
  385.     dbra    d1,cprsprrem.a
  386.     movem.l    (sp)+,d0-d7/a0-a6
  387.     rts
  388.  
  389. varset                    ;variablen neerzetten
  390.     movem.l    d0-d7/a0-a6,-(sp)
  391.     move.l    #var,a0
  392.  
  393.     move.l    #cprbck,var_cprbck(a0)
  394.     move.l    gfxlib,var__GfxBase(a0)
  395.     move.b    ntscmode,var_ntsc(a0)
  396.  
  397.     move.l    curpic1,var_pic1(a0)    ;variabel
  398.     move.l    curpic2,var_pic2(a0)    ;variabel
  399.     move.w    anispd1,var_anispd1(a0)
  400.     move.w    anitel1,var_anitel1(a0)
  401.     movem.l    (sp)+,d0-d7/a0-a6
  402.     rts
  403.     
  404.     ;this routine handles all videotracker-routines
  405.  
  406. rotply    
  407.     movem.l    d0-d7/a0-a6,-(sp)
  408.  
  409.     moveq.l    #0,d0
  410.  
  411.     lea    currot1,a2        ;routine 1
  412.     move.w    rotinf1,d0        ;routine info
  413.     bsr.s    rotplyr
  414.  
  415. rotply.end
  416.     movem.l    (sp)+,d0-d7/a0-a6
  417.     rts
  418.  
  419.     ;this routine handles 1 routine, BLIT !
  420.     
  421. rotplyr
  422.     movem.l    d0-d7/a1-a6,-(sp)
  423.  
  424.     move.l    #rot,(a2)        ;routinestart address
  425.  
  426.     move.b    #50,ntscmode        ;ntsc/pal hz
  427.     clr.l    curpic2            ;background picture
  428.     move.w    #1,anispd1        ;animationspeed
  429.     clr.w    anitel1            ;animation position
  430.  
  431.     lea    var,a0            ;communication-table
  432.  
  433.     move.l    #rotsrc,var_bck(a0)    ;background picture !!!
  434.     move.l    #routinemode,d0        ;routinemode !!!
  435.  
  436.     sub.l    a0,a0            ;picture info legen
  437.  
  438.     tst.l    (a2)            ;is er een routine ?
  439.     beq    rotplyr.end        ;interlace handling
  440.  
  441.     move.l    intdel,d2        ;delay
  442.     move.l    inttel,d1        ;teller
  443.     cmp.w    d2,d1
  444.     blt    rotplyr.end
  445.     clr.l    inttel
  446.                 
  447.     bsr    varset            ;variabelen updaten
  448.  
  449.     move.l    (a2),a1            ;routine halen
  450.     move.l    #var,a0            ;variablen tabel
  451.  
  452.     movem.l    d3-d7/a1-a6,-(sp)
  453.     moveq.l    #0,d1            ;vars wissen
  454.     moveq.l    #0,d2
  455.     moveq.l    #0,d3
  456.     moveq.l    #0,d4
  457.     moveq.l    #0,d5
  458.     moveq.l    #0,d6
  459.     moveq.l    #0,d7
  460.     sub.l    a2,a2
  461.     sub.l    a3,a3
  462.     sub.l    a4,a4
  463.     sub.l    a5,a5
  464.  
  465.     jsr    4(a1)            ;routine afwerken
  466.     movem.l    (sp)+,d3-d7/a1-a6
  467.  
  468.     ;Routine:
  469.     ;
  470.     ;Input:
  471.     ;a0=variabelentabel
  472.     ;d0=routinemode
  473.     ;
  474.     ;Output:
  475.     ;a0=picture
  476.     ;d1=copperlist
  477.     ;d2=interruptdelay        (NOT used till now)
  478.     
  479.     move.w    #$0020,$dff09a        ;vb off !
  480.  
  481.     move.l    d2,intdel        ;delay
  482.  
  483.     lea    cprjmp,a3
  484.     move.l    #cprbck-8,d0
  485.  
  486.     cmp.l    (a2),a1            ;routine ondertussen gewipt ?
  487.     bne.s    rotplyr.nocop
  488.     tst.l    d1            ;copperlist ?
  489.     beq.s    rotplyr.nocop
  490.     move.l    d1,d0
  491. rotplyr.nocop
  492.     move.w    d0,6(a3)
  493.     swap    d0
  494.     move.w    d0,2(a3)
  495.  
  496.     cmp.l    #0,a0            ;picture ?
  497.     beq.s    rotplyr.endvb
  498.  
  499.     move.l    a0,curpic1        ;current picture (cycle)
  500.     move.l    a0,curpal1        ;current palette
  501.  
  502.     tst.b    rotdpl            ;plane is geleverd
  503.     beq.s    rotplyr.set
  504.     clr.b    rotdpl
  505.     clr.l    cycdel1            ;cycle info wissen
  506.     clr.l    4+cycdel1
  507.     clr.l    curfrm1            ;curfrm1, altijd planes zetten
  508. rotplyr.set
  509.     clr.b    dplctr
  510.     bsr.s    grap
  511.     bsr    grac            ;colorset
  512. rotplyr.endvb
  513.     move.w    #$8020,$dff09a
  514. rotplyr.end
  515.     movem.l    (sp)+,d0-d7/a1-a6
  516.     rts
  517.  
  518.     ;removes possible routine-coppers
  519.     
  520. gracpr
  521.     movem.l    d0-d7/a0-a6,-(sp)
  522.     lea    cprjmp,a3
  523.     move.l    #cprbck-8,d0        ;copperlist resetten
  524.     move.w    d0,6(a3)
  525.     swap    d0
  526.     move.w    d0,2(a3)
  527.     movem.l    (sp)+,d0-d7/a0-a6
  528.     rts
  529.  
  530.     ;picture-to-copper routine, communicates with the
  531.     ;anim-player
  532.     
  533. grap                    ;d7=anim
  534.     movem.l    d0-d7/a0-a6,-(sp)
  535.  
  536.     clr.l    d7
  537.     
  538.     tst.l    curpic1            ;current picture ?
  539.     beq    grap.end
  540.  
  541.     move.l    curpic1,a2        ;normal pic halen
  542.  
  543.     lea    gracprscr,a1        ;window neerzetten
  544.     move.l    hogscr,d1
  545.  
  546.     move.w    pic_hgt(a2),d3        ;pic hoogte
  547.     move.w    pic_vew(a2),d5
  548.     btst    #2,d5            ;interlace ?
  549.     beq.s    grap.nohi4
  550.     lsr.w    #1,d3            ;/2
  551. grap.nohi4
  552.     cmp.w    d3,d1
  553.     bge.s    grap.hog
  554.     move.w    d1,d3
  555. grap.hog
  556.     sub.w    d3,d1
  557.     lsr.w    #1,d1
  558.     add.w    #win_str,d1
  559.     move.w    d1,d2
  560.     add.w    d3,d2
  561.  
  562.  
  563.     move.b    d1,2(a1)        ;y start
  564.     move.b    d2,6(a1)        ;y end
  565.  
  566.     move.w    pic_wid(a2),d4        ;pic breedte in bytes
  567.     lsl.l    #3,d4            ;make pixels
  568.  
  569.     move.l    #vew_wid*8,d0
  570.     move.l    #0,d1
  571.     move.l    #$71,d6
  572.  
  573.     move.w    pic_vew(a2),d5
  574.     btst    #15,d5            ;hires ?
  575.     beq.s    grap.nohi2
  576.  
  577.     move.l    #(vew_wid-4)*8*2,d0
  578.     move.l    #1,d1
  579.     move.l    #$81,d6
  580.  
  581.     cmp.w    #80,pic_wid(a2)        ;overscan ?
  582.     ble.s    grap.nohi2
  583.     move.l    #(vew_wid)*8*2,d0
  584.     move.l    #$61,d6
  585.  
  586. grap.nohi2    
  587.     btst    #6,d5            ;super hires ?
  588.     beq.s    grap.noshi2
  589.  
  590.     move.l    #(vew_wid-4)*8*4,d0
  591.     move.l    #2,d1
  592.     move.l    #$81,d6
  593.  
  594.     cmp.w    #80*2,pic_wid(a2)    ;overscan ?
  595.     ble.s    grap.noshi2
  596.     move.l    #(vew_wid)*8*4,d0
  597.     move.l    #$61,d6
  598.  
  599. grap.noshi2    
  600.  
  601.     clr.w    d5
  602.     cmp.w    d0,d4            ;breeder dan scherm ?
  603.     ble.s    grap.c
  604.     move.w    d4,d5
  605.     move.w    d0,d4
  606.     sub.w    d0,d5            ;modulo
  607.     lsr.w    #3,d5            ;/8
  608. grap.c
  609.     lsr.w    d1,d0
  610.     lsr.w    d1,d4
  611.  
  612.     move.w    d0,d2
  613.     sub.w    d4,d2
  614.     lsr.w    #1,d2            ;/2
  615.  
  616.     add.w    d6,d2
  617.     move.b    d2,3(a1)        ;x start
  618.     move.w    d2,d3            ;d3 bewaren !
  619.  
  620.     add.w    d4,d2            ;d4 bewaren !
  621.     move.b    d2,7(a1)        ;x end
  622.     
  623.     move.w    pic_vew(a2),d6
  624.     btst    #15,d6            ;hires ?
  625.     beq.s    grap.nohi5    
  626.     add.l    d4,d4            ;*2
  627. grap.nohi5
  628.     btst    #6,d6            ;super hires ?
  629.     beq.s    grap.noshi5    
  630.     add.l    d4,d4            ;*4
  631. grap.noshi5
  632.  
  633.     move.l    d7,-(sp)
  634.     move.w    pic_vew(a2),d6
  635.     move.l    #17,d0
  636.     move.l    #1,d1
  637.     move.l    #3,d7
  638.  
  639.     btst    #15,d6            ;hires ?
  640.     beq.s    grap.nohi3    
  641.     move.l    #9,d0
  642.     move.l    #2,d1
  643.     move.l    #2,d7
  644. grap.nohi3
  645.     btst    #6,d6            ;super hires ?
  646.     beq.s    grap.noshi3    
  647.     move.l    #9,d0
  648.     move.l    #2,d1
  649.     move.l    #1,d7
  650. grap.noshi3
  651.     sub.w    d0,d3
  652.     lsr.w    #1,d3
  653.     move.w    d3,10(a1)        ;ddfstrt
  654.     
  655.     move.w    d4,d2            ;pic breedte in pixels
  656.     lsr.w    #4,d2            ;/16
  657.     sub.w    d1,d2            ;-1
  658.  
  659.     lsl.w    d7,d2            ;*8
  660.     add.w    d2,d3
  661.     move.w    d3,14(a1)        ;ddfstop
  662.     move.l    (sp)+,d7
  663.     
  664.     lea    pic_raw(a2),a0
  665.  
  666.     moveq.l    #0,d2
  667.     move.w    pic_dpt(a2),d2
  668.     sub.l    #1,d2
  669.     muls    pic_wid(a2),d2
  670.     add.w    d2,d5
  671.  
  672.     move.w    pic_vew(a2),d2        ;viewmode add
  673.     btst    #2,d2
  674.     beq.s    grap.nolace4
  675.  
  676.     moveq.l    #0,d2
  677.     move.w    pic_dpt(a2),d2
  678.     muls    pic_wid(a2),d2
  679.     add.w    d2,d5            ;interlace gedoe
  680. grap.nolace4
  681.  
  682.     lea    gracprbpl,a4        ;iffpln neerzetten
  683.     lea    gracprpln,a0        ;iffpln neerzetten
  684.     moveq.l    #0,d2
  685.     move.w    pic_dpt(a2),d2        ;plnnummer 1 halen
  686.     move.l    #8,d6            ;copper step !
  687.  
  688.     tst.l    curpic2            ;2de picture ?
  689.     bne.s    grap.pic2
  690. grap.nopic2
  691.     move.w    d5,34(a1)        ;modulo oneven zetten
  692.     bra    grap.nodpl
  693. grap.pic2
  694.     move.l    curpic2,a3        ;oneven plane
  695.     move.l    currot2,a5        ;oneven plane
  696.     clr.l    curpic2            ;mischien niet goed
  697.     clr.l    curpal2            ;mischien niet goed
  698.     clr.l    currot2            ;mischien niet goed
  699.  
  700.     cmp.l    curpic1,a3        ;picture hetzelfde ?
  701.     beq    grap.nopic2
  702.     
  703.     cmp.l    #0,currot1        ;routine ?    
  704.     beq.s    grap.norot
  705.     cmp.l    currot1,a5        ;routine hetzelfde ?
  706.     beq    grap.nopic2
  707. grap.norot
  708.  
  709.     cmp.b    #3,d2            ;> 8 kleuren ?
  710.     bgt    grap.nopic2
  711.     move.w    pic_dpt(a3),d3        ;plnnummer 2 halen
  712.     cmp.b    d2,d3            ;gelijke plnummers ?
  713.     bne    grap.nopic2
  714.     move.w    pic_vew(a2),d1
  715.     cmp.w    pic_vew(a3),d1        ;view gelijk ?
  716.     bne    grap.nopic2
  717.  
  718.     move.w    pic_vew(a2),d1        ;groter dan view test
  719.     btst    #6,d1            ;super hires ?
  720.     beq.s    grap.nohi2a
  721.     move.l    #vew_wid*4,d1
  722.     bra.s    grap.nohi2b
  723. grap.nohi2a
  724.     btst    #15,d1            ;hires ?
  725.     beq.s    grap.noshi2a
  726.     move.l    #vew_wid*2,d1
  727.     bra.s    grap.nohi2b
  728. grap.noshi2a
  729.     move.l    #vew_wid,d1
  730. grap.nohi2b
  731.     cmp.w    pic_wid(a2),d1        ;breder dan view ?
  732.     bgt.s    grap.small
  733.     cmp.w    pic_wid(a3),d1        ;breder dan view ?
  734.     bgt.s    grap.small
  735.  
  736.     move.w    pic_vew(a2),d1
  737.     btst    #2,d1
  738.     beq.s    grap.nolace8a
  739.     move.l    hogscr,d1
  740.     add.l    d1,d1
  741.     bra.s    grap.nolace8b
  742. grap.nolace8a
  743.     move.l    hogscr,d1
  744. grap.nolace8b
  745.     cmp.w    pic_hgt(a2),d1        ;hoger dan view ?
  746.     bgt.s    grap.small
  747.     cmp.w    pic_hgt(a3),d1        ;hoger dan view ?
  748.     bgt.s    grap.small
  749.     bra.s    grap.big
  750.  
  751. grap.small
  752.     move.w    pic_hgt(a2),d1        ;wid+hgt<vew
  753.     cmp.w    pic_hgt(a3),d1        ;hoogte gelijk ?
  754.     bne    grap.nopic2
  755.     move.w    pic_wid(a2),d1
  756.     cmp.w    pic_wid(a3),d1        ;breedte gelijk ?
  757.     bne    grap.nopic2
  758.  
  759. grap.big
  760.     move.l    a3,curpic2
  761.     move.l    a3,curpal2
  762.     move.l    a5,currot2
  763.  
  764.     tst.b    dplctr            ;double playfield al gezet ?
  765.     beq.s    grap.nocop
  766.  
  767.     move.w    30(a1),34(a1)        ;modulo copieren
  768.  
  769.     move.w    2(a4),d1        ;bplcon0
  770.     btst    #10,d1            ;al double playfield ?
  771.     beq.s    grap.ta
  772.  
  773.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  774.     move.w    6(a0),14(a0)
  775.  
  776.     move.w    18(a0),26(a0)        ;plane 2>3 copieren
  777.     move.w    22(a0),30(a0)
  778.  
  779.     move.w    34(a0),42(a0)        ;plane 4>5 copieren
  780.     move.w    38(a0),46(a0)
  781.  
  782.     bra.s    grap.tb
  783. grap.ta
  784.     move.w    18(a0),42(a0)        ;plane 2>5 copieren
  785.     move.w    22(a0),46(a0)
  786.  
  787.     move.w    10(a0),26(a0)        ;plane 1>3 copieren
  788.     move.w    14(a0),30(a0)
  789.  
  790.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  791.     move.w    6(a0),14(a0)
  792.  
  793. grap.tb
  794.     move.l    #palette,a3        ;palette copieren
  795.  
  796.     move.w    #8-1,d1
  797. grap.pal
  798.     move.w    (a3)+,14(a3)
  799.     dbra    d1,grap.pal
  800.  
  801. grap.nocop
  802.     add.w    d3,d2
  803.     lsl.w    #8,d2
  804.     lsl.w    #4,d2
  805.     or.w    #$400,d2
  806.     move.w    d2,2(a4)        ;bplcon0
  807.  
  808.     movem.l    d0-d7/a0-a6,-(sp)
  809.  
  810.     move.l    curpic,a2        ;animpic ?
  811.     move.l    curfrm,d7
  812.     cmp.l    #0,a2
  813.     bne.s    grap.noanipic
  814.  
  815.     move.l    curpic2,a2        ;normal pic ?
  816.     move.l    curfrm2,d7
  817.     cmp.l    #0,a2
  818.     beq.s    grap.nodplpic
  819.  
  820. grap.noanipic
  821.     add.l    d6,a0
  822.     add.w    d6,d6
  823.     bsr.s    grappln            ;a2,d6,d7,d0
  824. grap.nodplpic
  825.     movem.l    (sp)+,d0-d7/a0-a6
  826.     add.w    d6,d6
  827.     bra.s    grap.nodpla
  828.  
  829.  
  830. grap.nodpl                ;geen double playfield
  831.     lsl.w    #8,d2
  832.     lsl.w    #4,d2
  833.     move.w    d2,2(a4)        ;bplcon0
  834.  
  835. grap.nodpla
  836.     move.w    d5,30(a1)        ;modulo even
  837.  
  838.     moveq.l    #0,d3
  839.     add.w    pic_vew(a2),d3        ;viewmode add
  840.     moveq.l    #0,d2
  841.     move.w    2(a4),d2
  842.     or.l    d3,d2
  843.     or.l    #$300,d2        ;genlock info
  844.     move.w    d2,2(a4)
  845.     
  846.     bsr.s    grappln            ;a2,d6,d7,d0
  847.  
  848. grap.end
  849.     
  850.     movem.l    (sp)+,d0-d7/a0-a6
  851.     rts
  852.         
  853.  
  854.     ;sets on of the 2 possible pictures to the copper
  855.     ;handles interlace
  856.  
  857.     ;d7=framenummer
  858.     ;d6=copperliststap
  859.     ;d0=raw planes positie
  860.     ;a2=current picture
  861. grappln                    ;planes invullen 
  862.     movem.l    d0-d7/a0-a6,-(sp)
  863.  
  864.     lea    pic_raw(a2),a1
  865.     move.l    a1,d0            ;raw planes
  866.     
  867.     moveq.l    #0,d2            ;x*y
  868.     move.w    pic_wid(a2),d2
  869.     lsr.l    #1,d2            ;/2
  870.     moveq.l    #0,d3
  871.     move.w    pic_hgt(a2),d3
  872.     muls    d3,d2
  873.     
  874.     move.l    d2,d4
  875.     add.l    d2,d2
  876.  
  877.     move.w    pic_dpt(a2),d3
  878.     muls    d3,d4            ;hele picture size
  879.     muls    d7,d4            ;frame*size d7 !
  880.  
  881.     add.l    d4,d4
  882.  
  883.     add.l    d4,d0
  884.  
  885.     move.l    #vew_wid,d5        ;max x view
  886.     move.l    hogscr,d4        ;max y view
  887.     move.w    pic_vew(a2),d1        ;viewmode add
  888.     btst    #2,d1
  889.     beq.s    grappln.nolace
  890.     add.l    d4,d4            ;max y view
  891. grappln.nolace
  892.     btst    #15,d1            ;hires ?
  893.     beq.s    grappln.nohi
  894.     move.l    #vew_wid*2,d5        ;max x view
  895. grappln.nohi
  896.     btst    #6,d1            ;super hires ?
  897.     beq.s    grappln.noshi
  898.     move.l    #vew_wid*4,d5        ;max x view
  899. grappln.noshi
  900.  
  901.     moveq.l    #0,d3            ;scherm centreren
  902.     move.w    pic_wid(a2),d3        ;pic breedte in bytes
  903.     cmp.w    d5,d3            ;breder dan scherm ?
  904.     ble.s    grappln.qa
  905.     sub.w    d5,d3            ;-scherm breedte
  906.     lsr.w    #2,d3            ;/4
  907.  
  908.     add.l    d3,d3
  909.  
  910.     add.l    d3,d0
  911. grappln.qa
  912.     move.w    pic_hgt(a2),d3        ;pic hoogte in bytes
  913.     cmp.w    d4,d3            ;hoger dan scherm ?
  914.     ble.s    grappln.qb
  915.     sub.w    d4,d3            ;-scherm breedte
  916.     lsr.w    #1,d3            ;/2
  917.     moveq.l    #0,d5
  918.     move.w    pic_wid(a2),d5        ;pic breedte in bytes
  919.     muls    pic_dpt(a2),d5
  920.     muls    d5,d3
  921.     add.l    d3,d0
  922. grappln.qb
  923.     moveq.l    #0,d2
  924.     move.w    pic_wid(a2),d2
  925.  
  926.     move.w    pic_vew(a2),d5        ;interlace flipping ?
  927.     btst    #2,d5
  928.     beq.s    grappln.nolac7b
  929.  
  930.     move.w    $04(a6),d5        ;even/oneven ?
  931.     btst    #15,d5
  932.     beq.s    grappln.nolac7b
  933.     
  934.     moveq.l    #0,d3
  935.     move.w    pic_wid(a2),d3
  936.     muls    pic_dpt(a2),d3
  937.     add.l    d3,d0
  938. grappln.nolac7b
  939.  
  940.     move.w    pic_dpt(a2),d1        ;plnnummer 1 halen
  941.     tst.w    d1            ;0 planes ?
  942.     beq.s    grappln.end
  943.     sub.w    #1,d1
  944. grappln.a
  945.     move.w    d0,3*2(a0)
  946.     swap    d0
  947.     move.w    d0,1*2(a0)
  948.     swap    d0
  949.     add.l    d6,a0            ;d6=copper step !
  950.     add.l    d2,d0
  951.     dbra    d1,grappln.a
  952. grappln.end
  953.     movem.l    (sp)+,d0-d7/a0-a6
  954.     rts
  955.  
  956.     ;sets palettes to copper
  957.     
  958. grac
  959.     movem.l    d0-d7/a0-a6,-(sp)
  960.  
  961.     lea    curpal1,a3        ;palette 1
  962.     move.l    #palette,a1
  963.     bsr.s    gracfrm
  964.  
  965.     lea    curpal2,a3        ;palette 2 (dpl)
  966.     move.l    #8*2+palette,a1
  967.     bsr.s    gracfrm
  968.     
  969.     bsr.s    palctr            ;palette-buffer to copper
  970. grac.end
  971.     movem.l    (sp)+,d0-d7/a0-a6
  972.     rts
  973.         
  974.     ;moves palette from picture to palette-buffer
  975.  
  976. gracfrm
  977.     movem.l    d0-d7/a0-a6,-(sp)
  978.     tst.l    (a3)            ;palette aanwezig ?
  979.     beq.s    gracfrm.end
  980.  
  981.     move.l    (a3),a2            ;current palette
  982.     
  983.     cmp.l    #'PALE',(a2)        ;palette ?
  984.     bne.s    gracfrm.pict
  985.     lea    6(a2),a0        ;palette
  986.     move.w    4(a2),d0        ;aantal kleuren
  987.     bra.s    gracfrm.col
  988. gracfrm.pict
  989.     cmp.l    #'ANIM',(a2)        ;animatie ?
  990.     bne.s    gracfrm.noanim
  991.  
  992.     moveq.l    #0,d1
  993.     move.w    pic_ani(a2),d1
  994.     bclr    #7,d1            ;behandelbit weghalen
  995.  
  996.     moveq.l    #0,d3
  997.     move.w    pic_wid(a2),d3
  998.     lsr.w    #1,d3            ;/2
  999.     muls    pic_hgt(a2),d3
  1000.     muls    pic_dpt(a2),d3
  1001.  
  1002.     add.l    d3,d3
  1003.  
  1004.     add.l    #pic_raw,d3
  1005.     move.l    d3,d5
  1006.  
  1007.     btst    #0,d1
  1008.     bne.s    gracfrm.buf2
  1009.     moveq.l    #0,d5
  1010. gracfrm.buf2
  1011.     add.l    d5,a2
  1012. gracfrm.noanim
  1013.     lea    pic_pal(a2),a0        ;palette
  1014.     move.w    pic_palnum(a2),d0
  1015.  
  1016.     cmp.w    #32-1,d0        ;niet meer dan 32 kleuren
  1017.     ble    gracfrm.sub
  1018.     move.w    #32-1,d0
  1019. gracfrm.sub
  1020.  
  1021.     tst.w    d0            ;0 planes ?
  1022.     beq.s    gracfrm.end
  1023. gracfrm.col
  1024. gracfrm.fa
  1025.     move.w    (a0)+,(a1)+
  1026.     dbra    d0,gracfrm.fa
  1027. gracfrm.end
  1028.     movem.l    (sp)+,d0-d7/a0-a6
  1029.     rts
  1030.     
  1031.     ;handles colorcycling in the palette-buffer
  1032.     ;and copies palette-buffer to copper
  1033.  
  1034. palctr
  1035.     movem.l    d0-d7/a0-a6,-(sp)
  1036.  
  1037.     move.l    curpic1,a2        ;current raw
  1038.     cmp.l    #0,a2
  1039.     beq.s    palctr.qb
  1040.     lea    cycdel1,a3        ;cycle delays
  1041.     move.l    #palette,a4
  1042.     bsr    palcyc
  1043. palctr.qb
  1044.     move.l    curpic2,a2        ;current raw
  1045.     cmp.l    #0,a2
  1046.     beq.s    palctr.c
  1047.     lea    cycdel2,a3        ;cycle delays
  1048.     move.l    #8*2+palette,a4
  1049.     bsr    palcyc
  1050.  
  1051. palctr.c
  1052.     lea    gracprcol,a1
  1053.     move.l    #palette,a0
  1054.  
  1055.     move.w    00(a0),00*4+2(a1)
  1056.     move.w    02(a0),01*4+2(a1)
  1057.     move.w    04(a0),02*4+2(a1)
  1058.     move.w    06(a0),03*4+2(a1)
  1059.     move.w    08(a0),04*4+2(a1)
  1060.     move.w    10(a0),05*4+2(a1)
  1061.     move.w    12(a0),06*4+2(a1)
  1062.     move.w    14(a0),07*4+2(a1)
  1063.     move.w    16(a0),08*4+2(a1)
  1064.     move.w    18(a0),09*4+2(a1)
  1065.  
  1066.     move.w    20(a0),10*4+2(a1)
  1067.     move.w    22(a0),11*4+2(a1)
  1068.     move.w    24(a0),12*4+2(a1)
  1069.     move.w    26(a0),13*4+2(a1)
  1070.     move.w    28(a0),14*4+2(a1)
  1071.     move.w    30(a0),15*4+2(a1)
  1072.     move.w    32(a0),16*4+2(a1)
  1073.     move.w    34(a0),17*4+2(a1)
  1074.     move.w    36(a0),18*4+2(a1)
  1075.     move.w    38(a0),19*4+2(a1)
  1076.  
  1077.     move.w    40(a0),20*4+2(a1)
  1078.     move.w    42(a0),21*4+2(a1)
  1079.     move.w    44(a0),22*4+2(a1)
  1080.     move.w    46(a0),23*4+2(a1)
  1081.     move.w    48(a0),24*4+2(a1)
  1082.     move.w    50(a0),25*4+2(a1)
  1083.     move.w    52(a0),26*4+2(a1)
  1084.     move.w    54(a0),27*4+2(a1)
  1085.     move.w    56(a0),28*4+2(a1)
  1086.     move.w    58(a0),29*4+2(a1)
  1087.  
  1088.     move.w    60(a0),30*4+2(a1)
  1089.     move.w    62(a0),31*4+2(a1)
  1090.  
  1091.     movem.l    (sp)+,d0-d7/a0-a6
  1092.     rts
  1093.  
  1094.     ;colorcyclinghandling of a palette
  1095.  
  1096. palcyc
  1097.     movem.l    d0-d7/a0-a6,-(sp)
  1098.     move.w    #4-1,d7            ;4 cycles
  1099. palcyc.d
  1100.     tst.w    (a3)+            ;delay klaar ?
  1101.     bne.s    palcyc.c
  1102.     
  1103.     moveq.l    #0,d1
  1104.     move.b    pic_cycstr(a2),d1    ;start color
  1105.     lsl.b    #1,d1        ;*2
  1106.  
  1107.     moveq.l    #0,d2
  1108.     move.b    pic_cycend(a2),d2    ;end color
  1109.     lsl.b    #1,d2        ;*2
  1110.  
  1111.     moveq.l    #0,d3
  1112.     move.b    pic_cycadd(a2),d3    ;richting
  1113.  
  1114.     move.l    a4,a0            ;palette pointer
  1115.     move.l    a0,a1
  1116.     add.l    d1,a0            ;startcolor
  1117.     add.l    d2,a1            ;endcolor
  1118.     
  1119.     cmp.b    #1,d3            ;omhoog
  1120.     beq.s    palcyc.up
  1121.     cmp.b    #3,d3            ;omlaag
  1122.     beq.s    palcyc.down
  1123.     bra.s    palcyc.i
  1124.  
  1125. palcyc.up                ;kleuren copieren
  1126.     move.w    (a1),d4            ;laatst color bewaren
  1127. palcyc.f                ;kleuren copieren
  1128.     cmp.l    a0,a1
  1129.     beq.s    palcyc.fa
  1130.     move.w    -(a1),2(a1)
  1131.     bra    palcyc.f
  1132. palcyc.fa
  1133.     move.w    d4,(a1)
  1134.     bra.s    palcyc.g    
  1135.     
  1136. palcyc.down
  1137.     move.w    (a0),d4            ;laatst color bewaren
  1138. palcyc.h                ;kleuren copieren
  1139.     cmp.l    a0,a1
  1140.     beq.s    palcyc.ha
  1141.     move.w    2(a0),(a0)+
  1142.     bra    palcyc.h
  1143. palcyc.ha
  1144.     move.w    d4,(a1)
  1145.  
  1146. palcyc.g
  1147.     move.b    pic_cycspd(a2),-1(a3)    ;delay zetten
  1148.     bra.s    palcyc.i
  1149. palcyc.c
  1150.     sub.w    #1,-2(a3)        ;cycle delay aftellen
  1151. palcyc.i
  1152.     add.l    #4,a2            ;next cycle info
  1153.     dbra    d7,palcyc.d
  1154.  
  1155. palcyc.qb
  1156.     movem.l    (sp)+,d0-d7/a0-a6
  1157.     rts
  1158.  
  1159.  
  1160. ;    SECTION    variabelen,DATA_c
  1161.  
  1162.     cnop    0,2
  1163. curtsk        dc.l    0
  1164. tskpri        dc.l    0
  1165. duplok        dc.l    0
  1166. inttel        dc.l    0
  1167. intdel        dc.l    0
  1168.  
  1169. form        dc.l    0
  1170. ifffil        dc.l    0
  1171. intvbold    dc.l    0
  1172. inttbeold    dc.l    0
  1173. patpos        dc.l    0
  1174. gfxlib        dc.l    0
  1175. doslib        dc.l    0
  1176. wbview      dc.l    0
  1177. mt_data        dc.l    0
  1178. memvid        dc.l    0
  1179. oldcprlist    dc.l    0
  1180. hogscr        dc.l    vew_hgt
  1181.  
  1182. inspos        dc.l    -1
  1183. anispd1        dc.w    1    ;nooit op 0 !
  1184. anispd2        dc.w    1
  1185.  
  1186.         cnop    0,2
  1187. varclr.s            ;start wissen
  1188. oldrot        dc.l    0
  1189. curpic        dc.l    0
  1190. curfrm        dc.l    0
  1191. cycdel1        ds.w    4
  1192. cycdel2        ds.w    4
  1193.  
  1194. rotinf1        dc.w    0
  1195. rotinf2        dc.w    0
  1196.  
  1197. effspd        dc.w    0
  1198. efflop        dc.b    0
  1199. anilop1        dc.b    0
  1200. anilop2        dc.b    0
  1201. anipal1        dc.b    0
  1202. anipal2        dc.b    0
  1203. rotdpl        dc.b    1
  1204. dplctr        dc.b    0
  1205.         cnop    0,2
  1206.  
  1207. insdat        ds.l    4
  1208. inspri        dc.l    0
  1209. instel        dc.w    0
  1210.  
  1211. cureff        dc.l    0
  1212. efftel        dc.w    0
  1213.  
  1214. curpal1        dc.l    0
  1215. curpal2        dc.l    0
  1216. currot1        dc.l    0
  1217. currot2        dc.l    0
  1218. curpic1        dc.l    0
  1219. curpic2        dc.l    0
  1220. anitel1        dc.w    0
  1221. anitel2        dc.w    0
  1222. curfrm1        dc.l    0
  1223. curfrm2        dc.l    0
  1224. oldfrm1        dc.l    0
  1225. oldfrm2        dc.l    0
  1226.  
  1227. varclr.e
  1228.         dc.l    0            ;wisruimte
  1229.     
  1230. varclr.ql    equ    varclr.e-varclr.s    ;wislengte
  1231.     
  1232. ;ownblit    dc.b    0
  1233. ntscmode    dc.b    0
  1234. end        dc.b    0
  1235.  
  1236. pronam    dc.b    'VideoTracker',0
  1237.     cnop    0,2
  1238. dosnam    dc.b    'dos.library',0
  1239.     cnop    0,4
  1240. gfxnam    dc.b    'graphics.library',0
  1241.     cnop    0,4
  1242.     
  1243.     cnop    0,4
  1244. gra.s
  1245. gracprscr
  1246.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1247. gracprbpl
  1248.     dc.w    $100,$0000,$102,$0000,$104,$0020
  1249.     dc.w    $108,$0000,$10a,$0000
  1250. gracprpln
  1251.     dc.w    $e0,$0000,$e2,$0000
  1252.     dc.w    $e4,$0000,$e6,$0000
  1253.     dc.w    $e8,$0000,$ea,$0000
  1254.     dc.w    $ec,$0000,$ee,$0000
  1255.     dc.w    $f0,$0000,$f2,$0000
  1256.     dc.w    $f4,$0000,$f6,$0000
  1257. gracprcol
  1258.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1259.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1260.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1261.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1262. cprjmp
  1263.     dc.w    $080,0,$082,0
  1264. gra.e
  1265. gra.ql    equ    gra.e-gra.s        ;block lengte
  1266.  
  1267.  
  1268. cpr
  1269.     dc.w    $0001,$fffe
  1270.     dc.w    $09c,$8001        ;tbeint
  1271. cprspr
  1272.     dc.w    $120,$0000,$122,$0000
  1273.     dc.w    $124,$0000,$126,$0000
  1274.     dc.w    $128,$0000,$12a,$0000
  1275.     dc.w    $12c,$0000,$12e,$0000
  1276.     dc.w    $130,$0000,$132,$0000
  1277.     dc.w    $134,$0000,$136,$0000
  1278.     dc.w    $138,$0000,$13a,$0000
  1279.     dc.w    $13c,$0000,$13e,$0000
  1280.  
  1281. cprbuf
  1282.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1283.     dc.w    $100,$9000,$102,$0000,$104,$0020
  1284.     dc.w    $108,$0000,$10a,$0000
  1285.     dc.w    $e0,$0000,$e2,$0000
  1286.     dc.w    $e4,$0000,$e6,$0000
  1287.     dc.w    $e8,$0000,$ea,$0000
  1288.     dc.w    $ec,$0000,$ee,$0000
  1289.     dc.w    $f0,$0000,$f2,$0000
  1290.     dc.w    $f4,$0000,$f6,$0000
  1291.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1292.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1293.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1294.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1295.     dc.w    $080,0,$082,0
  1296. cprbuf.e
  1297.  
  1298.     dc.w    $088,$0000        ;copjmp2
  1299.     dc.w    $080,0,$082,0        ;moet achter cprbck blijven !
  1300. cprbck
  1301. sprdat
  1302.     dc.w    $ffff,$fffe
  1303.  
  1304.  
  1305. prf_pat    equ    7            ;pref sample size
  1306. prf_patnum    equ    128        ;aantal songpos's
  1307. prf_len    equ    ((prf_pat*prf_patnum)+1)
  1308.  
  1309. prf_pos    equ    0            ;eff position (teller)
  1310.  
  1311. prf_effs    equ    1        ;start effect (*prf_patnum)
  1312. prf_effe    equ    2        ;end effect   (*prf_patnum)
  1313. prf_pri        equ    3        ;priority     (*prf_patnum)
  1314. prf_spd        equ    4        ;eff speed    (*prf_patnum)
  1315. prf_ani        equ    5        ;ani speed    (*prf_patnum)
  1316. prf_roth    equ    6        ;routine info (*prf_patnum)
  1317. prf_rotl    equ    7        ;routine info (*prf_patnum)
  1318.  
  1319. eff_num    equ    256            ;aantal effects
  1320.  
  1321. pic_wid        equ    4        ;wide in bytes
  1322. pic_hgt        equ    6        ;hoogte
  1323. pic_dpt        equ    8        ;number planes
  1324. pic_ani        equ    10        ;aantal effes (anim)
  1325. pic_vew        equ    12        ;viewmode
  1326. pic_cycstr    equ    14        ;cycle start (*4)
  1327. pic_cycend    equ    15        ;cycle end (*4)
  1328. pic_cycspd    equ    16        ;cycle speed (*4)
  1329. pic_cycadd    equ    17        ;cycle add (*4)
  1330. pic_palnum    equ    30        ;aantal kleuren
  1331. pic_pal        equ    32        ;palette start
  1332. pic_palsiz    equ    256*2        ;vaste palette size
  1333. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  1334.  
  1335. fil_namlen    equ    24        ;naamlengte
  1336. fil_len    equ    (fil_namlen+4+4)    ;effect info length
  1337. fil_num    equ    2+eff_num        ;aantal files
  1338. fil_fil    equ    0            ;file naam 
  1339. fil_dir    equ    24            ;pointer naar directory
  1340. fil_pnt    equ    28            ;pointer naar meminfo
  1341.  
  1342. palette    ds.w    64    ;palette
  1343.  
  1344. var_len        equ    $300        ;lengte vartabel
  1345.  
  1346. var__GfxBase    equ    $000        ;graphics lib
  1347. var_pic1    equ    $004        ;current picture
  1348. var_anispd1    equ    $008        ;animspeed
  1349. var_anitel1    equ    $00c        ;animspeed
  1350. var_cprbck    equ    $010        ;copperback
  1351. var_bck        equ    $014        ;background
  1352. var_pic2    equ    $018        ;current picture
  1353. var_ntsc    equ    $01c        ;ntsc/pal frequence
  1354. var_lnd        equ    $020        ;landscape
  1355. var_txt1    equ    $040        ;text
  1356. var_txt16    equ    15*4+var_txt1
  1357. var_vec1    equ    $080        ;vectors
  1358. var_vec16    equ    15*4+var_vec1
  1359. var_fon1    equ    $0c0        ;fonts
  1360. var_fon16    equ    15*4+var_fon1
  1361. var_cols1    equ    $100        ;colorsets
  1362. var_cols16    equ    15*4+var_cols1
  1363. var_obj1    equ    $180        ;objects
  1364. var_obj16    equ    15*4+var_obj1
  1365.  
  1366.     cnop    0,2
  1367. var    ds.b    $300    ;variabelen voor routines
  1368.  
  1369.     
  1370. ;    SECTION    10,CODE_C
  1371.         endc
  1372.  
  1373. ; this is the routine-source
  1374. ;**********************************************************************
  1375.  
  1376.         ifnd    rout
  1377. pic_wid        equ    4        ;wide in bytes
  1378. pic_hgt        equ    6        ;hoogte
  1379. pic_dpt        equ    8        ;number planes
  1380. pic_ani        equ    10        ;aantal effes (anim)
  1381. pic_vew        equ    12        ;viewmode
  1382. pic_cycstr    equ    14        ;cycle start (*4)
  1383. pic_cycend    equ    15        ;cycle end (*4)
  1384. pic_cycspd    equ    16        ;cycle speed (*4)
  1385. pic_cycadd    equ    17        ;cycle add (*4)
  1386. pic_palnum    equ    30        ;aantal kleuren
  1387. pic_pal        equ    32        ;palette start
  1388. pic_palsiz    equ    256*2        ;vaste palette size
  1389. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  1390.  
  1391. var_len        equ    $300        ;lengte vartabel
  1392.  
  1393. var__GfxBase    equ    $000        ;graphics lib
  1394. var_pic1    equ    $004        ;current picture
  1395. var_anispd1    equ    $008        ;animspeed
  1396. var_anitel1    equ    $00c        ;animspeed
  1397. var_cprbck    equ    $010        ;copperback
  1398. var_bck        equ    $014        ;background
  1399. var_pic2    equ    $018        ;current picture
  1400. var_ntsc    equ    $01c        ;ntsc/pal frequence
  1401. var_lnd        equ    $020        ;landscape
  1402. var_txt1    equ    $040        ;text
  1403. var_txt16    equ    15*4+var_txt1
  1404. var_vec1    equ    $080        ;vectors
  1405. var_vec16    equ    15*4+var_vec1
  1406. var_fon1    equ    $0c0        ;fonts
  1407. var_fon16    equ    15*4+var_fon1
  1408. var_cols1    equ    $100        ;colorsets
  1409. var_cols16    equ    15*4+var_cols1
  1410. var_obj1    equ    $180        ;objects
  1411. var_obj16    equ    15*4+var_obj1
  1412.  
  1413. vew_wid    equ    44
  1414. vew_hgt    equ    290
  1415. win_hgt    equ    117
  1416. win_str    equ    $20
  1417.         endc
  1418.  
  1419.  
  1420. ;calc        ;on=calculate tunnel-data,off=play tunnel
  1421.  
  1422.         ifd    calc
  1423. rotpic_wid    equ    48
  1424. rotpic_hgt    equ    288
  1425. rotpic_dpt    equ    6
  1426.         endc
  1427.         
  1428.         ifnd    calc
  1429. rotpic_wid    equ    48
  1430. rotpic_hgt    equ    288
  1431. rotpic_dpt    equ    1
  1432.  
  1433. rotcop_hgt    equ    113
  1434. rotcop_dpt    equ    5
  1435.         endc
  1436.         
  1437. ;    Input:
  1438. ;    a0=variabelen tabel
  1439. ;    d0=routinfo
  1440.  
  1441. ;    Output:
  1442. ;    a0=picture
  1443. ;    d1=copperlist
  1444.  
  1445.     SECTION    3,CODE_C
  1446.  
  1447. rot
  1448.     dc.l    'ROUT'
  1449.     movem.l    d2-d7/a1-a6,-(sp)
  1450.  
  1451.     lea    ($dff000).l,a6        ;hardware
  1452.     lea    rot,a5            ;prog base
  1453.  
  1454.     move.l    #32768,d2
  1455.     bsr    getd7
  1456.  
  1457. rot.ea    
  1458. ;    move.l    #4,d2            ;hoogte
  1459. ;    bsr    getd7
  1460. ;    muls    #1380,d7
  1461. ;    move.l    d7,variabele1-rot(a5)
  1462.  
  1463. ;    move.l    #1,d2            ;breedte
  1464. ;    bsr    getd7
  1465. ;    muls    #6,d7
  1466. ;    move.l    d7,variabele7-rot(a5)
  1467.  
  1468. rot.end
  1469.     move.l    var_cprbck(a0),d1
  1470.     sub.l    #8,d1
  1471.  
  1472.     move.l    a5,a1
  1473.     add.l    #rotcop1-rot,a1        ;copperjump adres zetten
  1474. ;    move.l    rotcopbuf-rot(a5),d2    ;double buffer
  1475. ;    add.l    d2,a1
  1476.  
  1477.     move.w    d1,6(a1)
  1478.     swap    d1
  1479.     move.w    d1,2(a1)
  1480.  
  1481. ;    move.l    a1,a2
  1482. ;    add.l    #rotcprbck1ntsc,a2
  1483. ;    move.l    a1,a3
  1484. ;    add.l    #rotcprend1ntsc,a3
  1485. ;    move.l    a1,a4
  1486. ;    add.l    #rotcprbck1,a4
  1487.  
  1488. ;    cmp.b    #50,var_ntsc(a0)    ;ntsc/pal frequence
  1489. ;    bne    rot.ntsc
  1490.  
  1491. ;    move.l    #$9029fffe,(a2)        ;reset ntsc split
  1492. ;    move.l    #$fa29fffe,(a3)        ;reset ntsc end
  1493. ;    add.l    #rotcprbck1,a1
  1494. ;    move.l    #$c825fffe,d0
  1495. ;    bra    rot.split
  1496. ;rot.ntsc
  1497. ;    move.l    #$c825fffe,(a4)        ;reset pal split
  1498. ;    move.l    #$00880000,(a3)        ;set ntsc end
  1499. ;    add.l    #rotcprbck1ntsc,a1
  1500. ;    move.l    #$9029fffe,d0
  1501.  
  1502. ;rot.split
  1503. ;    move.l    #$00880000,(a1)        ;set break
  1504. ;    move.l    var_cprbck(a0),a2
  1505. ;    cmp.b    #$ff,(a2)        ;menu uit ?
  1506. ;    bne    rot.a
  1507. ;    move.l    d0,(a1)
  1508. rot.a
  1509.  
  1510.     bsr    rotint            ;eventueel init
  1511.  
  1512.     ifnd    calc
  1513.     bsr    rotvew
  1514.     endc
  1515.  
  1516.     lea    rotpic,a0        ;picture
  1517.  
  1518.     ifnd    calc
  1519.     add.l    rotbuf-rot(a5),a0
  1520.     eor.l    #rotpic.e-rotpic,rotbuf-rot(a5)
  1521.     endc
  1522.  
  1523.     clr.l    d1
  1524.     
  1525.     ifnd    calc
  1526.     move.l    a5,d1
  1527.     add.l    #rotcop1-rot,d1        ;copperlist
  1528.     endc
  1529.     
  1530.     movem.l    (sp)+,d2-d7/a1-a6
  1531.     rts
  1532.  
  1533. getd7
  1534.     move.w    d0,d1
  1535.     divs    d2,d1
  1536.     and.l    #$ffff,d1
  1537.     move.l    d1,d7
  1538.     muls    d2,d1
  1539.     sub.w    d1,d0
  1540.     move.l    d0,d6
  1541.     add.l    #1,d7
  1542.     rts
  1543.  
  1544. rotint                    ;convert picture bits to bytes
  1545.     movem.l    d0-d7/a0-a6,-(sp)
  1546.  
  1547.     ifnd    calc
  1548.     move.l    a5,a1
  1549.     add.l    #rotcoptus.s-rot,a1
  1550.     tst.b    (a1)            ;init copper ?
  1551.     bne    rotint.pic
  1552.  
  1553.     move.l    a5,a2
  1554.     add.l    #rotcoppic+pic_raw-rot,a2
  1555.     move.l    a5,a4
  1556.     add.l    #rotcoppic+pic_pal-rot,a4
  1557.  
  1558.     move.l    rotcopstr-rot(a5),d1
  1559.     
  1560. ;    lea    rotpic+pic_raw+2,a3    ;screen picture
  1561. ;    move.l    rotbuf-rot(a5),d5
  1562. ;    add.l    a3,d5
  1563.     
  1564.     move.w    #rotcop_hgt-1,d0
  1565. rotint.g
  1566. ;    move.w    #4-1,d4
  1567. rotint.ga
  1568.     move.b    d1,(a1)            ;y-raster
  1569.  
  1570. ;    move.w    d5,10(a1)
  1571. ;    swap    d5
  1572. ;    move.w    d5,6(a1)
  1573. ;    swap    d5
  1574.     
  1575.     move.w    #rotpic_wid/8-1,d7
  1576. rotint.h
  1577.     move.w    #8-1,d6
  1578. rotint.ha
  1579.     clr.w    d2
  1580.     btst    d6,(a2)
  1581.     beq    rotint.hab
  1582.     bset    #0,d2
  1583. rotint.hab
  1584.     btst    d6,6(a2)
  1585.     beq    rotint.hac
  1586.     bset    #1,d2
  1587. rotint.hac
  1588.     btst    d6,2*6(a2)
  1589.     beq    rotint.had
  1590.     bset    #2,d2
  1591. rotint.had
  1592.     btst    d6,3*6(a2)
  1593.     beq    rotint.hae
  1594.     bset    #3,d2
  1595. rotint.hae
  1596.     btst    d6,4*6(a2)
  1597.     beq    rotint.haf
  1598.     bset    #4,d2
  1599. rotint.haf
  1600.     clr.l    d3
  1601.     move.w    d2,d3
  1602.     lsl.l    #1,d3            ;words
  1603.     move.w    (a4,d3),d2
  1604.     move.w    d2,6(a1)
  1605. ;    move.w    d2,14(a1)                
  1606.     add.l    #4,a1
  1607.     dbra    d6,rotint.ha        ;next bit
  1608.  
  1609.     add.l    #1,a2            ;next byte
  1610.     dbra    d7,rotint.h
  1611.  
  1612.     add.l    #4*6,a2            ;next row
  1613.     
  1614.     add.l    #1,d1
  1615. ;    add.l    #4+8,a1
  1616.     add.l    #4,a1
  1617. ;    dbra    d4,rotint.ga
  1618.  
  1619. ;    add.l    #4*rotpic_wid*rotpic_dpt,d5
  1620.     dbra    d0,rotint.g
  1621.  
  1622.     endc
  1623.     
  1624. rotint.pic
  1625.     move.l    var_bck(a0),a1        ;background picture
  1626.     cmp.l    #0,a1            ;empty ?
  1627.     beq    rotint.nopic
  1628.  
  1629.     cmp.l    rotbck-rot(a5),a1    ;already on screen ?
  1630.     beq    rotint.nopic
  1631.  
  1632.     clr.l    d0
  1633.     move.w    pic_wid(a1),d0        ;get width
  1634.     lsl.l    #3,d0            ;*8 for pixelnumber
  1635.     cmp.w    #256,d0            ;bigger than buffer ?
  1636.     bgt    rotint.nopic
  1637.  
  1638.     clr.l    d1
  1639.     move.w    pic_hgt(a1),d1        ;heigth
  1640.     cmp.w    #512,d1            ;bigger than buffer ?
  1641.     bgt    rotint.nopic
  1642.     muls    d1,d0            ;* heigth
  1643.  
  1644.     cmp.l    #rotcol_l,d0        ;bigger than buffer ?
  1645.     bgt    rotint.nopic
  1646.  
  1647.     move.l    a1,rotbck-rot(a5)
  1648.  
  1649.     lea    pic_pal(a1),a2
  1650.  
  1651.     ifd    calc
  1652.     lea    rotpic+pic_pal,a3
  1653.     move.l    (a2),(a3)
  1654.     move.l    4(a2),4(a3)
  1655.     move.l    8(a2),8(a3)
  1656.     move.l    12(a2),12(a3)
  1657.     move.l    16(a2),16(a3)
  1658.     move.l    20(a2),20(a3)
  1659.     move.l    24(a2),24(a3)
  1660.     move.l    28(a2),28(a3)
  1661.  
  1662.     move.l    32(a2),32(a3)
  1663.     move.l    36(a2),36(a3)
  1664.     move.l    40(a2),40(a3)
  1665.     move.l    44(a2),44(a3)
  1666.     move.l    48(a2),48(a3)
  1667.     move.l    52(a2),52(a3)
  1668.     move.l    56(a2),56(a3)
  1669.     move.l    60(a2),60(a3)
  1670.     endc
  1671.     
  1672.     ifnd    calc
  1673.     lea    rotpic2+pic_pal,a3
  1674. ;    move.l    (a2),(a3)
  1675. ;    move.l    4(a2),4(a3)
  1676. ;    move.l    8(a2),8(a3)
  1677. ;    move.l    12(a2),12(a3)
  1678.     endc
  1679.     
  1680.     move.l    a5,a4
  1681.     add.l    #rotcol-rot,a4        ;start colorbuffer
  1682.     
  1683.     clr.l    d0
  1684.     move.w    pic_wid(a1),d0        ;get width
  1685.     lea    pic_raw(a1),a2        ;start raw planes
  1686.  
  1687.     clr.l    d1            ;y start position
  1688. rotint.f
  1689.     clr.l    d6            ;x start position
  1690. rotint.d
  1691.  
  1692.     move.l    #8-1,d7            ;read bits of 1 byte
  1693. rotint.c
  1694.  
  1695.     clr.l    d3            ;colorvalue
  1696.     move.l    a2,a3
  1697.     clr.l    d5            ;colorinfo
  1698. rotint.c1
  1699.     btst    d7,(a2)            ;get colorbits
  1700.     beq    rotint.c0    
  1701.     bset    d5,d3
  1702. rotint.c0    
  1703.     add.l    d0,a2
  1704.     add.l    #1,d5
  1705.     cmp.w    pic_dpt(a1),d5
  1706.     bne    rotint.c1
  1707.     move.l    a3,a2
  1708.  
  1709.     move.l    d1,d5            ;y pos
  1710.     lsl.l    #8,d5            ;*256 (width)
  1711.  
  1712.     move.l    d6,d4            ;x byte pos    
  1713.     lsl.l    #3,d4            ;make pixels
  1714.     add.l    #7,d4            ;x bit pos
  1715.     sub.l    d7,d4
  1716.  
  1717.     move.l    a4,a3
  1718.     add.l    d4,a3
  1719.     add.l    d5,a3
  1720.     move.b    d3,(a3)
  1721.         
  1722.     dbra    d7,rotint.c
  1723.  
  1724.     add.l    #1,a2            ;next byte
  1725.  
  1726.     add.l    #1,d6
  1727.     cmp.l    d0,d6
  1728.     bne    rotint.d
  1729.  
  1730.     clr.l    d4
  1731.     move.w    pic_dpt(a1),d4
  1732.     sub.w    #1,d4
  1733.     muls    d0,d4
  1734.     add.l    d4,a2
  1735.  
  1736.     add.l    #1,d1
  1737.     cmp.w    pic_hgt(a1),d1        ;y-end reached ?
  1738.     bne    rotint.f
  1739.     
  1740.     bra    rotint.end
  1741. rotint.nopic
  1742.     ifd    calc
  1743.     bsr    rotcal
  1744.     endc
  1745.     
  1746. rotint.end    
  1747.     movem.l    (sp)+,d0-d7/a0-a6
  1748.     rts
  1749.  
  1750.     ifd    calc
  1751. rotcal                    ;calculate tunnel
  1752.     movem.l    d0-d7/a0-a6,-(sp)
  1753.  
  1754.     move.l    #32767-7000,d3        ;size
  1755. rotcal.f
  1756.     move.l    a5,a3
  1757.     add.l    #rotcol-rot,a3
  1758. rotcal.d
  1759.     move.w    #((32767-7000)/256)/1-1,d6    ;sinus pixel heigth
  1760. rotcal.c
  1761.     btst    #6,($bfe001).l
  1762.     beq    rotcal.end
  1763.  
  1764.     lea    rotsin,a0
  1765.     move.l    a3,a1
  1766.     move.w    #256-1,d0        ;tunnel picture width
  1767. rotcal.a
  1768.     move.b    (a1)+,d1
  1769.     
  1770.     move.w    #4-1,d7            ;sinus pixel width
  1771. rotcal.e
  1772.  
  1773.     clr.l    d2
  1774.     move.w    (a0)+,d2
  1775.     ext.l    d2
  1776.     divs    d3,d2
  1777.     ext.l    d2            ;x
  1778.  
  1779.     cmp.l    #rotpic_wid*4,d2    ;out of border ?
  1780.     bge    rotcal.not
  1781.     cmp.l    #-rotpic_wid*4,d2
  1782.     blt    rotcal.not
  1783.     
  1784.     move.l    a5,a4
  1785.     add.l    #rotoff-rot,a4
  1786.     move.l    d2,d5
  1787.     add.l    #rotpic_wid*4,d5
  1788.     lsl.l    #2,d5            ;longwords
  1789.     add.l    d5,a4
  1790.         
  1791.     add.l    #rotpic_wid*4,d2
  1792.  
  1793.     lea    rotpic+pic_raw,a2
  1794.     move.l    d2,d4
  1795.     lsr.l    #3,d4
  1796.     add.l    d4,a2
  1797.     lsl.l    #3,d4
  1798.     eor.b    #7,d2
  1799.     sub.l    d4,d2
  1800.                     
  1801.     clr.l    d4
  1802.     move.w    (((rotsin_l/4)/2)*2)-2(a0),d4
  1803.     ext.l    d4
  1804.     divs    d3,d4
  1805.     ext.l    d4            ;y
  1806.  
  1807.     cmp.l    #rotpic_hgt/2,d4    ;out of border ?
  1808.     bge    rotcal.not
  1809.     cmp.l    #-rotpic_hgt/2,d4
  1810.     blt    rotcal.not
  1811.     
  1812.     move.l    d4,d5
  1813.     add.l    #rotpic_hgt/2,d5
  1814.     muls    #rotpic_wid*8*4,d5    ;longwords
  1815.     add.l    d5,a4
  1816.  
  1817.     move.l    a1,a6            ;current picture position
  1818.     sub.l    a5,a6            ;-rot
  1819.     sub.l    #rotcol-rot,a6        ;-rotcol
  1820.     move.l    a6,(a4)            ;offset table
  1821.         
  1822.     add.l    #rotpic_hgt/2,d4
  1823.     muls    #rotpic_wid*rotpic_dpt,d4
  1824.     add.l    d4,a2
  1825.     
  1826.     moveq.l    #0,d4
  1827. rotcal.b2    
  1828.     btst    d4,d1
  1829.     beq    rotcal.b1
  1830.     bset    d2,(a2)
  1831.     bra    rotcal.b1a
  1832. rotcal.b1
  1833.     bclr    d2,(a2)
  1834. rotcal.b1a
  1835.     add.l    #rotpic_wid,a2
  1836.     add.b    #1,d4
  1837.     cmp.b    #rotpic_dpt,d4
  1838.     bne    rotcal.b2
  1839.  
  1840. rotcal.not
  1841.     dbra    d7,rotcal.e        ;next sinus-position
  1842.     
  1843.     dbra    d0,rotcal.a        ;next x-pixel
  1844.  
  1845.     sub.l    #1*1,d3
  1846.     cmp.l    #0,d3
  1847.     ble    rotcal.end
  1848.     dbra    d6,rotcal.c        ;next sinus-size
  1849.  
  1850.     add.l    #256,a3            ;next tunnelpicture y-row
  1851.     move.l    a3,d0
  1852.     sub.l    #rotcol,d0
  1853.     cmp.l    #256*256,d0
  1854.     bne    rotcal.d
  1855.     bra    rotcal.f
  1856. rotcal.end
  1857.     movem.l    (sp)+,d0-d7/a0-a6
  1858.     rts
  1859.     endc
  1860.     
  1861.  
  1862. rotvew                    ;show tunnel on screen
  1863.     movem.l    d0-d7/a0-a6,-(sp)
  1864.     move.l    a5,a0
  1865.     add.l    #rotoff-rot,a0        ;tunnel data
  1866.     lea    rotpic+pic_raw,a1    ;screen picture
  1867.     add.l    rotbuf-rot(a5),a1
  1868.  
  1869.     move.l    a5,a6
  1870.     add.l    #rotcol.e-rot,a6    ;tunnel picture
  1871.  
  1872. rotvew.e1
  1873.     move.l    rotpos-rot(a5),d4
  1874.     add.l    #256,d4
  1875.     cmp.l    #(512+256)*256,d4
  1876.     bne    rotvew.e
  1877.     clr.l    rotpos-rot(a5)
  1878.     bra    rotvew.e1
  1879. rotvew.e    
  1880.     move.l    d4,rotpos-rot(a5)
  1881.     sub.l    d4,a6
  1882.  
  1883.     move.w    #(rotpic_hgt/4)-1,d6
  1884. rotvew.d
  1885.     rept    ((rotpic_wid)/4)
  1886.  
  1887.     moveq.l    #0,d4            ;plane 0
  1888.     
  1889.     movem.l    (a0)+,a2-a5
  1890.  
  1891.     add.l    a6,a2
  1892.     move.b    (a2),d5
  1893.     dc.w    $6704
  1894.     bset    #29,d4
  1895.  
  1896.     add.l    a6,a3
  1897.     move.b    (a3),d5
  1898.     dc.w    $6704
  1899.     bset    #25,d4
  1900.  
  1901.     add.l    a6,a4
  1902.     move.b    (a4),d5
  1903.     dc.w    $6704
  1904.     bset    #21,d4
  1905.  
  1906.     add.l    a6,a5
  1907.     move.b    (a5),d5
  1908.     dc.w    $6704
  1909.     bset    #17,d4
  1910.  
  1911.     movem.l    (a0)+,a2-a5
  1912.  
  1913.     add.l    a6,a2
  1914.     move.b    (a2),d5
  1915.     dc.w    $6704
  1916.     bset    #13,d4
  1917.  
  1918.     add.l    a6,a3
  1919.     move.b    (a3),d5
  1920.     dc.w    $6704
  1921.     bset    #09,d4
  1922.  
  1923.     add.l    a6,a4
  1924.     move.b    (a4),d5
  1925.     dc.w    $6704
  1926.     bset    #05,d4
  1927.  
  1928.     add.l    a6,a5
  1929.     move.b    (a5),d5
  1930.     dc.w    $6704
  1931.     bset    #01,d4
  1932.  
  1933.     move.l    d4,(a1)+
  1934.  
  1935.     endr
  1936.  
  1937.     add.l    #(3*(rotpic_wid*rotpic_dpt))+(rotpic_wid*(rotpic_dpt-1)),a1
  1938.     dbra    d6,rotvew.d
  1939.     
  1940.             
  1941. rotvew.end
  1942.     movem.l    (sp)+,d0-d7/a0-a6
  1943.     rts
  1944.  
  1945.  
  1946. rotbuf        dc.l    0
  1947. rotcopbuf    dc.l    0
  1948. rotbck        dc.l    0
  1949. rotpos        dc.l    0
  1950. rotcopstr    dc.l    $73
  1951.  
  1952.     ifd    calc
  1953. rotsin
  1954.        dc.w       0,201,402,603,804,1005,1206,1407,1608,1809,2009,2210
  1955.        dc.w       2410,2611,2811,3012,3212,3412,3612,3811,4011,4210,4410,4609
  1956.        dc.w       4808,5007,5205,5404,5602,5800,5998,6195,6393,6590,6786,6983
  1957.        dc.w       7179,7375,7571,7767,7962,8157,351,8545,8739,8933,9126,9319
  1958.        dc.w       9512,9704,9896,10087,10278,10469,10659,10849,11039,11228,11417,11605
  1959.        dc.w       11793,11980,12167,12353,12539,12725,12910,13094,13279,13462,13645,13828
  1960.        dc.w       14010,14191,14372,14553,14732,14912,15090,15269,15446,15623,15800,15976
  1961.        dc.w       16151,16325,16499,16673,16846,17018,17189,17360,17530,17700,17869,18037
  1962.        dc.w       18204,18371,18537,18703,18868,19032,19195,19357,19519,19680,19841,20000
  1963.        dc.w       20159,20317,20475,20631,20787,20942,21096,21250,21403,21554,21705,21856
  1964.        dc.w       22005,22154,22301,22448,22594,22739,22884,23027,23170,23311,23452,23592
  1965.        dc.w       23731,23870,24007,24143,24279,24413,24547,24680,24811,24942,25072,25201
  1966.        dc.w       25329,25456,25582,25708,25832,25955,26077,26198,26319,26438,26556,26674
  1967.        dc.w       26790,26905,27019,27133,27245,27356,27466,27575,27683,27790,27896,28001
  1968.        dc.w       28105,28208,28310,28411,28510,28609,28706,28803,28898,28992,29085,29177
  1969.        dc.w       29268,29358,29447,29535,29621,29706,29791,29874,29956,30037,30117,30195
  1970.        dc.w       30273,30349,30424,30498,30571,30643,30714,30783,30852,30919,30985,31050
  1971.        dc.w       31113,31176,31237,31297,31356,31414,31470,31526,31580,31633,31685,31736
  1972.        dc.w       31785,31833,31880,31926,31971,32014,32057,32098,32137,32176,32213,32250
  1973.        dc.w       32285,32318,32351,32382,32412,32441,32469,32495,32521,32545,32567,32589
  1974.        dc.w       32609,32628,32646,32663,32678,32692,32705,32717,32728,32737,32745,32752
  1975.        dc.w       32757,32761,32765,32766,32767,32766,32765,32761,32757,32752,32745,32737
  1976.        dc.w       32728,32717,32705,32692,32678,32663,32646,32628,32609,32589,32567,32545
  1977.        dc.w       32521,32495,32469,32441,32412,32382,32351,32318,32285,32250,32213,32176
  1978.        dc.w       32137,32098,32057,32014,31971,31926,31880,31833,31785,31736,31685,31633
  1979.        dc.w       31580,31526,31470,31414,31356,31297,31237,31176,31113,31050,30985,30919
  1980.  
  1981.        dc.w       30852,30783,30714,30643,30571,30498,30424,30349,30273,30195,30117,30037
  1982.        dc.w       29956,29874,29791,29706,29621,29535,29447,29358,29268,29177,29085,28992
  1983.        dc.w       28898,28803,28706,28609,28510,28411,28310,28208,28105,28001,27896,27790
  1984.        dc.w       27683,27575,27466,27356,27245,27133,27019,26905,26790,26674,26556,26438
  1985.        dc.w       26319,26198,26077,25955,25832,25708,25582,25456,25329,25201,25072,24942
  1986.        dc.w       24811,24680,24547,24413,24279,24143,24007,23870,23731,23592,23452,23311
  1987.        dc.w       23170,23027,22884,22739,22594,22448,22301,22154,22005,21856,21705,21554
  1988.        dc.w       21403,21250,21096,20942,20787,20631,20475,20317,20159,20000,19841,19680
  1989.        dc.w       19519,19357,19195,19032,18868,18703,18537,18371,18204,18037,17869,17700
  1990.        dc.w       17530,17360,17189,17018,16846,16673,16499,16325,16151,15976,15800,15623
  1991.        dc.w       15446,15269,15090,14912,14732,14553,14372,14191,14010,13828,13645,13462
  1992.        dc.w       13279,13094,12910,12725,12539,12353,12167,11980,11793,11605,11417,11228
  1993.        dc.w       11039,10849,10659,10469,10278,10087,9896,9704,9512,9319,9126,8933
  1994.        dc.w       8739,8545,8351,8157,7962,7767,7571,7375,7179,6983,6786,6590
  1995.        dc.w       6393,6195,5998,5800,5602,5404,5205,5007,4808,4609,4410,4211
  1996.        dc.w       4011,3811,3612,3412,3212,3012,2811,2611,2410,2210,2009,1809
  1997.        dc.w       1608,1407,1206,1005,804,603,402,201,0,-201,-402,-603
  1998.        dc.w       -804,-1005,-1206,-1406,-1607,-1808,-2009,-2209,-2410,-2610,-2811,-3011
  1999.        dc.w       -3211,-3411,-3611,-3811,-4011,-4210,-4409,-4608,-4807,-5006,-5205,-5403
  2000.        dc.w       -5601,-5799,-5997,-6195,-6392,-6589,-6786,-6982,-7179,-7375,-7571,-7766
  2001.        dc.w       -7961,-8156,-8351,-8545,-8739,-8932,-9126,-9319,-9511,-9703,-9895,-10087
  2002.        dc.w       -10278,-10469,-10659,-10849,-11038,-11227,-11416,-11604,-11792,-11980,-12166,-12353
  2003.        dc.w       -12539,-12724,-12909,-13094,-13278,-13462,-13645,-13827,-14009,-14191,-14372,-14552
  2004.        dc.w       -14732,-14911,-15090,-15268,-15446,-15623,-15799,-15975,-16150,-16325,-16499,-16672
  2005.        dc.w       -16845,-17017,-17189,-17360,-17530,-17699,-17868,-18036,-18204,-18371,-18537,-18702
  2006.        dc.w       -18867,-19031,-19194,-19357,-19519,-19680,-19840,-20000,-20159,-20317,-20474,-20631
  2007.        dc.w       -20787,-20942,-21096,-21249,-21402,-21554,-21705,-21855,-22004,-22153,-22301,-22448
  2008.        dc.w       -22594,-22739,-22883,-23027,-23169,-23311,-23452,-23592,-23731,-23869,-24006,-24143
  2009.        dc.w       -24278,-24413,-24546,-24679,-24811,-24942,-25072,-25201,-25329,-25456,-25582,-25707
  2010.        dc.w       -25831,-25954,-26077,-26198,-26318,-26437,-26556,-26673,-26789,-26905,-27019,-27132
  2011.        dc.w       -27244,-27355,-27466,-27575,-27683,-27790,-27896,-28001,-28105,-28208,-28309,-28410
  2012.        dc.w       -28510,-28608,-28706,-28802,-28897,-28992,-29085,-29177,-29268,-29358,-29446,-29534
  2013.        dc.w       -29621,-29706,-29790,-29873,-29955,-30036,-30116,-30195,-30272,-30349,-30424,-30498
  2014.        dc.w       -30571,-30643,-30713,-30783,-30851,-30918,-30984,-31049,-31113,-31175,-31236,-31297
  2015.        dc.w       -31356,-31413,-31470,-31525,-31580,-31633,-31684,-31735,-31785,-31833,-31880,-31926
  2016.        dc.w       -31970,-32014,-32056,-32097,-32137,-32176,-32213,-32249,-32284,-32318,-32350,-32382
  2017.        dc.w       -32412,-32441,-32468,-32495,-32520,-32544,-32567,-32588,-32609,-32628,-32646,-32662
  2018.        dc.w       -32678,-32692,-32705,-32717,-32727,-32736,-32744,-32751,-32757,-32761,-32764,-32766
  2019.        dc.w       -32767,-32766,-32764,-32761,-32757,-32751,-32744,-32736,-32727,-32717,-32705,-32692
  2020.        dc.w       -32678,-32662,-32646,-32628,-32609,-32588,-32567,-32544,-32520,-32495,-32468,-32441
  2021.        dc.w       -32412,-32382,-32350,-32318,-32284,-32249,-32213,-32176,-32137,-32097,-32056,-32014
  2022.        dc.w       -31970,-31926,-31880,-31833,-31785,-31735,-31684,-31633,-31580,-31525,-31470,-31413
  2023.        dc.w       -31356,-31297,-31236,-31175,-31113,-31049,-30984,-30918,-30851,-30783,-30713,-30643
  2024.        dc.w       -30571,-30498,-30424,-30349,-30272,-30195,-30116,-30036,-29955,-29873,-29790,-29706
  2025.        dc.w       -29621,-29534,-29446,-29358,-29268,-29177,-29085,-28992,-28897,-28802,-28706,-28608
  2026.        dc.w       -28510,-28410,-28309,-28208,-28105,-28001,-27896,-27790,-27683,-27575,-27466,-27355
  2027.        dc.w       -27244,-27132,-27019,-26905,-26789,-26673,-26556,-26437,-26318,-26198,-26077,-25954
  2028.        dc.w       -25831,-25707,-25582,-25456,-25329,-25201,-25072,-24942,-24811,-24679,-24546,-24413
  2029.        dc.w       -24278,-24143,-24006,-23869,-23731,-23592,-23452,-23311,-23169,-23027,-22883,-22739
  2030.        dc.w       -22594,-22448,-22301,-22153,-22004,-21855,-21705,-21554,-21402,-21249,-21096,-20942
  2031.        dc.w       -20787,-20631,-20474,-20317,-20159,-20000,-19840,-19680,-19519,-19357,-19194,-19031
  2032.        dc.w       -18867,-18702,-18537,-18371,-18204,-18036,-17868,-17699,-17530,-17360,-17189,-17017
  2033.        dc.w       -16845,-16672,-16499,-16325,-16150,-15975,-15799,-15623,-15446,-15268,-15090,-14911
  2034.        dc.w       -14732,-14552,-14372,-14191,-14009,-13827,-13645,-13462,-13278,-13094,-12909,-12724
  2035.        dc.w       -12539,-12353,-12166,-11980,-11792,-11604,-11416,-11227,-11038,-10849,-10659,-10469
  2036.        dc.w       -10278,-10087,-9895,-9703,-9511,-9319,-9126,-8932,-8739,-8545,-8351,-8156
  2037.        dc.w       -7961,-7766,-7571,-7375,-7179,-6982,-6786,-6589,-6392,-6195,-5997,-5799
  2038.        dc.w       -5601,-5403,-5205,-5006,-4807,-4608,-4409,-4210,-4011,-3811,-3611,-3411
  2039.        dc.w       -3211,-3011,-2811,-2610,-2410,-2209,-2009,-1808,-1607,-1406,-1206,-1005
  2040.        dc.w       -804,-603
  2041. rotsin.e
  2042. rotsin_l    equ    rotsin.e-rotsin
  2043.  
  2044.        dc.w       0,201,402,603,804,1005,1206,1407,1608,1809,2009,2210
  2045.        dc.w       2410,2611,2811,3012,3212,3412,3612,3811,4011,4210,4410,4609
  2046.        dc.w       4808,5007,5205,5404,5602,5800,5998,6195,6393,6590,6786,6983
  2047.        dc.w       7179,7375,7571,7767,7962,8157,351,8545,8739,8933,9126,9319
  2048.        dc.w       9512,9704,9896,10087,10278,10469,10659,10849,11039,11228,11417,11605
  2049.        dc.w       11793,11980,12167,12353,12539,12725,12910,13094,13279,13462,13645,13828
  2050.        dc.w       14010,14191,14372,14553,14732,14912,15090,15269,15446,15623,15800,15976
  2051.        dc.w       16151,16325,16499,16673,16846,17018,17189,17360,17530,17700,17869,18037
  2052.        dc.w       18204,18371,18537,18703,18868,19032,19195,19357,19519,19680,19841,20000
  2053.        dc.w       20159,20317,20475,20631,20787,20942,21096,21250,21403,21554,21705,21856
  2054.        dc.w       22005,22154,22301,22448,22594,22739,22884,23027,23170,23311,23452,23592
  2055.        dc.w       23731,23870,24007,24143,24279,24413,24547,24680,24811,24942,25072,25201
  2056.        dc.w       25329,25456,25582,25708,25832,25955,26077,26198,26319,26438,26556,26674
  2057.        dc.w       26790,26905,27019,27133,27245,27356,27466,27575,27683,27790,27896,28001
  2058.        dc.w       28105,28208,28310,28411,28510,28609,28706,28803,28898,28992,29085,29177
  2059.        dc.w       29268,29358,29447,29535,29621,29706,29791,29874,29956,30037,30117,30195
  2060.        dc.w       30273,30349,30424,30498,30571,30643,30714,30783,30852,30919,30985,31050
  2061.        dc.w       31113,31176,31237,31297,31356,31414,31470,31526,31580,31633,31685,31736
  2062.        dc.w       31785,31833,31880,31926,31971,32014,32057,32098,32137,32176,32213,32250
  2063.        dc.w       32285,32318,32351,32382,32412,32441,32469,32495,32521,32545,32567,32589
  2064.        dc.w       32609,32628,32646,32663,32678,32692,32705,32717,32728,32737,32745,32752
  2065.        dc.w       32757,32761,32765,32766,32767,32766,32765,32761,32757,32752,32745,32737
  2066.        dc.w       32728,32717,32705,32692,32678,32663,32646,32628,32609,32589,32567,32545
  2067.        dc.w       32521,32495,32469,32441,32412,32382,32351,32318,32285,32250,32213,32176
  2068.        dc.w       32137,32098,32057,32014,31971,31926,31880,31833,31785,31736,31685,31633
  2069.        dc.w       31580,31526,31470,31414,31356,31297,31237,31176,31113,31050,30985,30919
  2070.  
  2071.  
  2072. rotpic
  2073.         dc.l    'PICT'
  2074.         dc.w    rotpic_wid,rotpic_hgt,rotpic_dpt,1,0
  2075.         ds.b    4*4
  2076.         dc.w    32-1
  2077.         dc.w    $000,$00f,$0f0,$0ff,$f00,$f0f,$ff0,$fff
  2078.         dc.w    $000,$00f,$0f0,$0ff,$f00,$f0f,$ff0,$fff
  2079.         dc.w    $000,$00f,$0f0,$0ff,$f00,$f0f,$ff0,$fff
  2080.         dc.w    $000,$00f,$0f0,$0ff,$f00,$f0f,$ff0,$fff
  2081.         ds.w    256-32
  2082.         ds.b    rotpic_wid*rotpic_hgt*rotpic_dpt
  2083.         endc    
  2084.  
  2085.         ifnd    calc
  2086. rotpic
  2087.         dc.l    'PICT'
  2088.         dc.w    rotpic_wid,rotpic_hgt,rotpic_dpt,1,0
  2089.         ds.b    4*4
  2090.         dc.w    7
  2091.         dc.w    $000,$fff,$0f0,$0ff,$f00,$f0f,$ff0,$fff
  2092.         ds.w    256-8
  2093.         ds.b    rotpic_wid*rotpic_hgt*rotpic_dpt
  2094. rotpic.e
  2095. rotpic2
  2096.         dc.l    'PICT'
  2097.         dc.w    rotpic_wid,rotpic_hgt,rotpic_dpt,1,0
  2098.         ds.b    4*4
  2099.         dc.w    7
  2100.         dc.w    $000,$fff,$0f0,$0ff,$f00,$f0f,$ff0,$fff
  2101.         ds.w    256-8
  2102.         ds.b    rotpic_wid*rotpic_hgt*rotpic_dpt
  2103.         endc
  2104.  
  2105. rotoff
  2106.         ifd    calc
  2107.         ds.l    rotpic_wid*8*rotpic_hgt
  2108.         endc
  2109.         ifnd    calc
  2110.         incbin    'videotracker:bin/tun1.bin'
  2111.         cnop    0,2
  2112.         endc
  2113. rotoff.e
  2114. rotoff_l    equ    rotoff.e-rotoff
  2115.  
  2116.         ds.b    256*256
  2117. rotcol        ds.b    512*256
  2118. rotcol.e
  2119.         ds.b    256*256
  2120.         
  2121. rotcol_l    equ    rotcol.e-rotcol
  2122.  
  2123. rotcoppic
  2124.         incbin    'videotracker:bin/coppertunnel_l32.bin'
  2125.  
  2126. rotcop1
  2127.     dc.w    $80,0,$82,0
  2128.  
  2129. rotcoptus.s
  2130.     dc.w    $002f,$fffe
  2131. ;    dc.w    $002b,$fffe
  2132. ;    dc.w    $e0,0,$e2,0
  2133.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2134.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2135.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2136.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2137.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2138.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2139. rotcoptus.e
  2140. rotcoptus_l    equ    rotcoptus.e-rotcoptus.s
  2141.  
  2142.     rept    rotcop_hgt-1
  2143.     dc.w    $002f,$fffe
  2144. ;    dc.w    $002b,$fffe
  2145. ;    dc.w    $e0,0,$e2,0
  2146.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2147.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2148.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2149.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2150.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2151.     dc.w    $182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0,$182,0
  2152.     endr
  2153.     dc.w    $088,$000
  2154. rot.e
  2155.  
  2156. ;**********************************************************************
  2157.  
  2158.     ifd    rout
  2159. rotsrc
  2160.     incbin    'videotracker:effect/tunnel1_l2.bck'
  2161. ;    incbin    'videotracker:effect/world_l8.bck'
  2162. ;    incbin    'videotracker:effect/copperpic_l8.bck'
  2163. ;    incbin    'videotracker:effect/copperpic_l64.bck'
  2164.     cnop    0,2
  2165.     endc
  2166.